// 导入http请求库
import { defHttp } from '@/utils/http/axios';
// 导入用户相关的接口参数和返回值类型
import { LoginParams, LoginResultModel, GetUserInfoModel } from './model/userModel';
// 导入错误消息模式
import { ErrorMessageMode } from '#/axios';

const prefix = 'user/';
// 定义接口枚举
enum Api {
  Login = 'login', // 登录
  Logout = 'logout', // 登出
  GetUserInfo = 'get-user-info', // 获取用户信息
  GetPermCode = 'get-auth-code', // 获取权限码
  List = prefix + 'list', // 列表
  Save = prefix + 'save', // 保存 新增/修改
  Delete = prefix + 'delete', // 删除
  Import = prefix + 'import', // 导入
  Export = prefix + 'export', // 导出
  ExitsPhone = 'exists-phone', // 测试重试
}

/**
 * @description: 用户登录接口
 * @param {LoginParams} params 登录参数
 * @param {ErrorMessageMode} mode 错误消息模式
 * @return {LoginResultModel} 返回登录结果
 */
export function loginApi(params: LoginParams, mode: ErrorMessageMode = 'modal') {
  return defHttp.post<LoginResultModel>(
    {
      url: Api.Login,
      params,
    },
    {
      errorMessageMode: mode,
    },
  );
}

/**
 * @description: 获取用户信息接口
 * @return {GetUserInfoModel} 返回用户信息
 */
export function getUserInfo() {
  return defHttp.get<GetUserInfoModel>({ url: Api.GetUserInfo }, { errorMessageMode: 'none' });
}

/**
 * @description: 获取权限码接口
 * @return {string[]} 返回权限码数组
 */
export function getPermCode() {
  return defHttp.get<string[]>({ url: Api.GetPermCode });
}

/**
 * @description: 用户登出接口
 */
export function doLogout() {
  return defHttp.get({ url: Api.Logout });
}

/**
 * @description: 获取用户列表接口
 * @param {any} params 查询参数
 */
export function getListApi(params: any) {
  return defHttp.get({ url: Api.List, params });
}

/**
 * @description: 保存用户接口（新增/修改）
 * @param {any} params 用户信息
 */
export function saveUserApi(params: any) {
  return defHttp.post({ url: Api.Save, params });
}
/**
 * @description: 验证手机号是否唯一
 * @param {any} params 用户信息
 */
export function exitsPhone(params) {
  return defHttp.post(
    { url: Api.ExitsPhone, params },
    {
      errorMessageMode: 'none',
    },
  );
}

/**
 * @description: 删除用户接口
 * @param {{ id: number }} params 用户ID
 */
export function deleteApi(params: { id: number }) {
  return defHttp.get({ url: Api.Delete, params });
}

/**
 * @description: 导出用户接口
 * @param {any} params 查询参数
 */
export function exportUserApi(params) {
  return defHttp.get({ url: Api.Export, params });
}
